package com.ljn.data.dao;

import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkRequestBuilder;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.search.builder.SearchSourceBuilder;

import java.util.List;
import java.util.Map;

public interface ElasticsearchApi {
    /**
     * @description:操作索引
     * @param request
     * @return
     * @author:lengjn
     * @createTime:2019年10月17日下午3:50:53
     */

    IndexResponse index(IndexRequest request);

    /**
     * @description:异步操作索引
     * @param request
     * @author:lengjn
     * @createTime:2019年10月17日下午3:51:14
     */
    void indexAsync(IndexRequest request);

    /**
     * @description: 创建IndexRequest
     * @param index
     * @param type
     * @param id 数据id
     * @param json 数据内容
     * @return
     * @author:lengjn
     * @createTime:2019年10月17日下午3:51:28
     */
    IndexRequest indexRequest(String index, String type, String id, String json);

    /**
     * @param index
     * @param type
     * @param map
     * @return
     * @description:批量创建Request
     * @author:lengjn
     * @createTime:2019年10月17日下午3:51:57
     */
    BulkRequest bulkRequest(String index, String type, Map<String, String> map);

    /**
     * @description:批量操作索引
     * @param bulkRequest
     * @author:lengjn
     * @createTime:2019年10月17日下午3:52:55
     */
    void bulkIndex(BulkRequest bulkRequest);

    /**
     * @description:删除ES数据
     * @param index
     * @param type
     * @author:lengjn
     * @createTime:2019年10月17日下午3:53:31
     */
    void delDocument(String index,String type);

    /**
     * @description:根据id删除es数据
     * @param index
     * @param type
     * @param id
     * @author:lengjn
     * @createTime:2019年10月17日下午3:40:19
     */
    void delDocumentById(String index,String type, String id);

    /**
     * @description:根据ids删除es数据
     * @param index
     * @param type
     * @param ids
     * @author:lengjn
     * @createTime:2019年10月17日下午3:40:19
     */
    void delDocumentByIds(String index,String type, List<String> ids);

    /**
     * @description: 执行查询
     * @param
     * @return
     * @author:lengjn
     * @createTime:2019年10月17日下午4:12:22
     */
    SearchResponse exeSearch(String index, String type, SearchSourceBuilder sourceBuilder);

    /**
     * @description: 根据查询条件执行删除
     * @param index
     * @param type
     * @param sourceBuilder
     * @author: lengjn
     * @createTime:2019年10月18日上午9:38:55
     */
    void exeDeleteBySearch(String index, String type, SearchSourceBuilder sourceBuilder);
   
    void exeUpdate(String index, String type,Map<String, String> map);
    
}
